// <com.woyouqiu.Copyright>
// --------------------------------------------------------------
// <copyright>上海有求网络科技有限公司 2015</copyright>
// <Solution>Vecen.BangChuang</Solution>
// <Project>Vecen.BangChuang.Application</Project>
// <FileName>IWalletAppService.cs</FileName>
// <CreateTime>2017-05-16 14:28</CreateTime>
// <Author>何苗</Author>
// <Email>hemiao@woyouqiu.com</Email>
// <log date="2017-05-16 14:28" version="00001">创建</log>
// --------------------------------------------------------------
// </com.woyouqiu.Copyright>

using Abp.Application.Services.Dto;
using Vecen.BangChuang.Authorization.Accounts.Dto;

namespace Vecen.BangChuang.BangChuang.Wallets {
    using System.Threading.Tasks;
    using Abp.Application.Services;
    using Dtos;


    /// <summary>
    /// 钱包操作
    /// </summary>
    public interface IWalletAppService: IApplicationService {

        /// <summary>
        /// 获得钱包信息
        /// </summary>
        /// <returns></returns>
        Task<WalletOutDto> GetWalletInfoAsync();


        /// <summary>
        /// 添加银行帐号
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task SaveBankCardAsync(BankCardInputDto input);


        /// <summary>
        /// 获取当前用户的所有银行卡
        /// </summary>
        /// <returns></returns>
        Task<ListResultDto<BankCardListDto>> GetSelfBankCardsAsync();


        /// <summary>
        /// 更新银行卡信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task UpdateBankCardAsync(BankCardInputDto input);

        /// <summary>
        /// 删除银行卡
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task DeleteBankCardAsync(int id);

        /// <summary>
        /// 申请提现
        /// </summary>
        /// <returns></returns>
        Task ApplyWithdrawAsync(ApplyWithdrawInputDto input);


        /// <summary>
        /// 获得所有提现记录
        /// </summary>
        /// <returns></returns>
        Task<PagedResultDto<WithdrawListOutDto>> GetAllWithdrawAsync(GetAllWithdrawInputDto input);

        /// <summary>
        /// 删除提现申请
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task DeleteWithdrawAppyAsync(int id);



        /// <summary>
        /// 设置提现密码
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task SetWithdrawPassword(WithdrawPasswordSetInput input);

        /// <summary>
        /// 修改提现密码
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task ChangeWithdrawPassword(WithdrawPasswordChangeInput input);

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        Task<ListResultDto<BankTypeListDto>> GetBankTypesAsync();
    }
}